#include "mqueue.h"
#include "log/log.h"
#include "pthread.h"
#include "string.h"

void *fun(void *);
mqd_t mq;
int main(void)
{

    struct mq_attr attr;
    attr.mq_flags = 0;      // 阻塞式读取消息
    attr.mq_maxmsg = 10;    // 队列存储的最大消息数
    attr.mq_msgsize = 1024; // 队列中每条消息的最大字节数

    // 打开消息队列
    mq = mq_open("/875464", O_RDWR | O_CREAT, 0666, &attr);
    if (mq == -1)
    {
        perror("消息队列创建失败。。。");
    }
    log_info("mq:%d", mq);
    log_info("消息队列创建成功。。。");

    // 发送消息
    char *msg = "hello world ";
    if (mq_send(mq, msg, strlen(msg), 0) == -1)
    {
        log_error("发送消息失败");
    }
    log_info("发送消息成功");

    pthread_t id;
    // 创建线程
    if (pthread_create(&id, NULL, fun, NULL) != 0)
    {
        log_error("线程创建失败。。。。");
    }
    log_info("线程创建成功。。。。");

    // 保持主线程运行
    pthread_join(id, NULL);
    // 关闭消息队列
    mq_close(mq);
    // 删除消息队列: 消息队列的名字
    mq_unlink("/875464");
    return 0;
}

void *fun(void *)
{
    char buffer[1024];

    // 接收消息队列发来的消息
    ssize_t data_len = mq_receive(mq, buffer, sizeof(buffer), NULL);
    if (data_len == -1)
    {
        log_info("mq:%d", mq);
        perror("接收数据错误。。。");
        return NULL;
    }
    log_info("接收到的数据是：%.*s", data_len, buffer);
}